package com.ruoyi.cms.controller.portal;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cms.entity.domain.Model;
import com.ruoyi.cms.entity.req.GenerateModelReq;
import com.ruoyi.cms.entity.req.ModelListReq;
import com.ruoyi.cms.entity.req.MoveToCollectionReq;
import com.ruoyi.cms.entity.req.ReGenerateModelReq;
import com.ruoyi.cms.entity.resp.FileListResp;
import com.ruoyi.cms.entity.resp.ModelDetailResp;
import com.ruoyi.cms.entity.resp.ModelListResp;
import com.ruoyi.common.annotation.AllowAnonymous;
import com.ruoyi.common.core.domain.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.cms.service.ModelService;

import java.util.List;

/**
 * 模型
 */
@RestController
@RequestMapping("/portal/cms/model")
public class ModelController {

    @Autowired
    private ModelService modelService;

    /**
     * 查询模型列表（允许未登录）
     */
    @PostMapping("/list")
    @AllowAnonymous
    public R<Page<ModelListResp>> list(@RequestBody ModelListReq req) {
        return modelService.list(req);
    }

    /**
     * 查询我的模型列表
     */
    @PostMapping("/myModelList")
    public R<Page<ModelListResp>> myModelList(@RequestBody ModelListReq req) {
        return modelService.myModelList(req);
    }

    /**
     * 查询模型文件（允许未登录）
     */
    @PostMapping("/getFileList/{modelId}")
    @AllowAnonymous
    public R<FileListResp> getFileList(@PathVariable("modelId") Long modelId) {
        return modelService.getFileList(modelId);
    }

    /**
     * 查询我的模型文件
     */
    @PostMapping("/getMyFileList/{modelId}")
    public R<FileListResp> getMyFileList(@PathVariable("modelId") Long modelId) {
        return modelService.getMyFileList(modelId);
    }

    /**
     * 生成模型
     */
    @PostMapping("/generate")
    public R<?> generate(@RequestBody GenerateModelReq req) {
        return modelService.generate(req);
    }

    /**
     * 根据合集id查询模型列表（允许未登录）
     */
    @AllowAnonymous
    @PostMapping("/queryModelByCollectionId")
    public R<Page<ModelListResp>> queryModelByCollectionId(@RequestBody ModelListReq req) {
        return modelService.queryModelByCollectionId(req);
    }

    /**
     * 根据合集id查询我的模型列表
     */
    @PostMapping("/queryMyModelByCollectionId")
    public R<Page<ModelListResp>> queryMyModelByCollectionId(@RequestBody ModelListReq req) {
        return modelService.queryMyModelByCollectionId(req);
    }

    /**
     * 删除模型
     */
    @PostMapping("/delete")
    public R<?> delete(@RequestParam List<String> ids) {
        return modelService.delete(ids);
    }

    /**
     * 修改模型
     */
    @PostMapping("/update")
    public R<?> update(@RequestBody Model model) {
        return modelService.update(model);
    }

    /**
     * 查看模型详情（允许未登录）
     */
    @PostMapping("/detail")
    @AllowAnonymous
    public R<ModelDetailResp> detail(@RequestParam Long id) {
        return modelService.detail(id);
    }

    /**
     * 查看我的模型详情
     */
    @PostMapping("/myDetail")
    public R<ModelDetailResp> myDetail(@RequestParam Long id) {
        return modelService.myDetail(id);
    }

    /**
     * 移入合集
     */
    @PostMapping("/moveToCollection")
    public R<?> moveToCollection(@RequestBody MoveToCollectionReq req) {
        return modelService.moveToCollection(req);
    }

    /**
     * 重新生成模型
     */
    @AllowAnonymous
    @PostMapping("/reGenerate")
    public R<?> reGenerate(@RequestBody ReGenerateModelReq req) throws Exception {
        return modelService.reGenerate(req);
    }

}
